/**
 * Map工具类
 */
export class MapUtils {

    /**
     * Map转Array
     * @param strMap Map对象
     * @returns Array
     */
    static MapToArray(strMap: Map<any, any>) {
        return Array.from(strMap).reduce((obj, [key, value]) => Object.assign(obj, { [key]: value }), {})
    }

    /**
     * Map转Object
     * @param strMap Map对象
     * @returns 
     */
    static strMapToObj(strMap: Map<any, any>) {
        let obj = Object.create(null);
        for (const [k, v] of strMap) {
            obj[k] = v;
        }
        return obj;
    }

    /**
     * Map转JSON
     * @param strMap Map对象
     * @returns 
     */
    static strMapToJson(strMap: Map<any, any>) {
        return JSON.stringify(this.strMapToObj(strMap));
    }

    /**
     * Map转数组字符串
     * @param strMap Map对象
     * @returns 
     */
    static strMapToArray(strMap: Map<any, any>) {
        return JSON.stringify(this.MapToArray(strMap));
    }

    /**
     * 字符串转MAP
     * @param strMap Map对象
     * @returns 
     */
    static strArrayToMap(strJson: string) {
        return new Map(JSON.parse(strJson))
    }

    /**
     * 深度克隆
     * @param obj 对象
     * @returns 
     */
    static shallowClone(obj: any) {
        try {
            return JSON.parse(JSON.stringify(obj));
        } catch (error: any) {
            throw new Error(error);
        }

    }
}